Bootstrap
Embark on an adventure in the Mind Island

Project Overview

Project Type: Group (10 developers, 3 Days)
Focus: Game Production, Character Action & Animation
Role: Solo Programmer
Game Engine: Unreal 4
Language: Unreal Blueprint
Description:
Two side is a third-person adventure game, telling a story that an office worker girl, Luna, suffered from exhaustion and tiredness of work and entered into the world of her mind. The player will fight against demons and collect angels through the Mind Island to maintain the tranquil of Luna's mind.
In GGJ 2022, I'm the solo programmer on the team as always.
Controls:
     WASD = Move
     LMB = Attack
     RMB = Defend
     Left Shift / Alt = Roll
     Space = Jump
     Esc = Pause Menu
Features:
     ▪  Character Animation State Machine
     ▪  Enemy AI Behavior Tree
     ▪  Unlocked Action Directions
     ▪  Enemy Split and Respawn system
     ▪  HP lose/gain
     ▪  UI (Start Menu, Pause Menu, HUD)
     ▪  Win/Lose conditions


Part 01 - Character State Machine

This is the simple state machine for character animations. Just added attack, defend, and roll, these three actions onto default state machine.

State Machine
The communication between Anim BP and Character BP is in two-ways. From Anim BP -> Character BP, I used state Enter/Left Events to set bools for each animation state, so as to notify Character BP to trigger according events.
Anim Event Graph

Part 02 - Character BP

Events for Attack and Defend will be triggered in certain states. A RotateCharacter function will be trigger to let character instantly face to attack/defend direction.

Attack: trigger if it’s not in Roll
Defend: trigger if it’s in Idle/Run
Events for Attack & Defend
The basic idea of rolling is as such:
If it’s running, record the input direction, set Walk Speed to rolling speed, use a timeline to Add Movement Input for a short time. When rolling is finished, set Walk Speed back to Normal.
Event for Rolling

Part 03 - Weapon & Hit Event

The damage collision box is scaled up to make the gameplay smooth and comfortable.
Weapon Collision for Hit Event
The basic idea to implement Hit is as such:
Use OnComponentBeginOverlap to get the actor. If it’s EnemyBP, and it’s not being collected, notify Enemy with GetHitBack event and spawn emitter hit location.
When Overlap is end, notify Enemy with ResetHit. That’s used for reset enemy AI movement.
Events for Weapon Hit

Part 04 - Enemy AI

The enemy AI controller is running a behavior tree. I used AI Perception component, in which I set AI sight with 180 degrees for half angle and 500 for radius. I also set AI hearing with 800 for radius as secondary detection.
Enemy Controller - On Target Perception Updated
Also, when the enemy has stimulus in range, it will change to a red material. By defaul it’s in black.
When the enemy has touched character, it will use a red base material and shrink in size, simulating the effect that it gets into the soul of the character.
Enemy Behavior Tree
Enemy Behavior - Idle
Enemy Behavior - Detect & Attack

Part 05 - Auxiliary VFX

The attack trail effect is controlled in Character BP. I used timelines to set a parameter for that particle system to control the periods of showing and hiding.
The hit effect is just spawned once at the location where an enemy gets hit.

Attack Trail VFX
Events for Show/Hide Trail in Character BP
In order to sync the trail show/hide with animation frames, I used animation notify to communicate to Character BP. The Character BP then will show the trail for a period of time by setting the lift time parameter of the trail particle system.
Animation Notifies for Show/Hide Trail
The enemy dying effect is implemented by instantly setting a new material, and then set a parameter on that material.
Enemy Dying Effect
Spawning New Enemies
Enemy Destroy Event
Damaging Effect and Healing Effect are spawned at character location when it gets damaged by an enemy and picks up an angel collectible.
Character Damaging Effect
Character Healing Effect

Part 06 - Game UI

In a short 3 days, I finished the basic user interface elements, including main menu, about us, cg scene, pause menu and game HUD. All buttons and bars are functional.
Main Menu
About Us
Pause Menu
Game HUD

Reflection

I learned a lot from this Global Game Jam.

▪   First, everyone has many good game ideas. What need more is how to start removing and defining the core, instead of adding and modifying.

▪   Those technical points that I think I could do easily, turned out to have unexpected problems. So, always give yourself more time in your dev plan. There is a distance between that you can do and you can do it fast and well.

▪   Trust your teammates. Everyone has his/her focus. We should believe that everyone has ability and potential to finish a task somehow.

▪   In a limited amount of time and people, the priority of things is always important. When a tech test shows difficulty, reconsider the priority list.

▪   To accept imperfection. Your teammates make mistakes, you make mistakes. The final executable has bugs. But you need a good attitude to face those mistakes and bugs and correct them if possible.